gdk/win32/gdkevents-win32.c gdk/win32/gdkkeys-win32.c Check the
authorTor Lillqvist <tml@novell.com>
Wed, 18 May 2005 14:53:00 +0000 (14:53 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Wed, 18 May 2005 14:53:00 +0000 (14:53 +0000)
2005-05-18  Tor Lillqvist  <tml@novell.com>

* gdk/win32/gdkevents-win32.c
* gdk/win32/gdkkeys-win32.c
* gdk/win32/gdkprivate-win32.h: Check the KF_EXTENDED bit in
lParam of WM_KEY* messages to distinguish between left and right
Control and Alt keys. Unfortunately, the right Shift key doesnt
set KF_EXTENDED, so to distinguish between left and right Shift
keys, check the scan code. (#304584)

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-8
gdk/win32/gdkevents-win32.c
gdk/win32/gdkkeys-win32.c
gdk/win32/gdkprivate-win32.h

index f4defc31b5871e26ace61f13bf4ae4f2f6ab1e6b..4d31198e1045b76cd78dde35593d59f0b67b43ce 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2005-05-18  Tor Lillqvist  <tml@novell.com>
+
+       * gdk/win32/gdkevents-win32.c
+       * gdk/win32/gdkkeys-win32.c
+       * gdk/win32/gdkprivate-win32.h: Check the KF_EXTENDED bit in
+       lParam of WM_KEY* messages to distinguish between left and right
+       Control and Alt keys. Unfortunately, the right Shift key doesnt
+       set KF_EXTENDED, so to distinguish between left and right Shift
+       keys, check the scan code. (#304584)
+
 2005-05-18  Matthias Clasen  <mclasen@redhat.com>
 
        * gdk/x11/gdkproperty-x11.c (gdk_property_get): Warn if
index f4defc31b5871e26ace61f13bf4ae4f2f6ab1e6b..4d31198e1045b76cd78dde35593d59f0b67b43ce 100644 (file)
@@ -1,3 +1,13 @@
+2005-05-18  Tor Lillqvist  <tml@novell.com>
+
+       * gdk/win32/gdkevents-win32.c
+       * gdk/win32/gdkkeys-win32.c
+       * gdk/win32/gdkprivate-win32.h: Check the KF_EXTENDED bit in
+       lParam of WM_KEY* messages to distinguish between left and right
+       Control and Alt keys. Unfortunately, the right Shift key doesnt
+       set KF_EXTENDED, so to distinguish between left and right Shift
+       keys, check the scan code. (#304584)
+
 2005-05-18  Matthias Clasen  <mclasen@redhat.com>
 
        * gdk/x11/gdkproperty-x11.c (gdk_property_get): Warn if
index f4defc31b5871e26ace61f13bf4ae4f2f6ab1e6b..4d31198e1045b76cd78dde35593d59f0b67b43ce 100644 (file)
@@ -1,3 +1,13 @@
+2005-05-18  Tor Lillqvist  <tml@novell.com>
+
+       * gdk/win32/gdkevents-win32.c
+       * gdk/win32/gdkkeys-win32.c
+       * gdk/win32/gdkprivate-win32.h: Check the KF_EXTENDED bit in
+       lParam of WM_KEY* messages to distinguish between left and right
+       Control and Alt keys. Unfortunately, the right Shift key doesnt
+       set KF_EXTENDED, so to distinguish between left and right Shift
+       keys, check the scan code. (#304584)
+
 2005-05-18  Matthias Clasen  <mclasen@redhat.com>
 
        * gdk/x11/gdkproperty-x11.c (gdk_property_get): Warn if
index 222b457c8d1dfd8128ae99695ead6b4a83730ebc..47a7eb482098bfa3d74c5c466266d600c72949fd 100644 (file)
@@ -2438,6 +2438,26 @@ gdk_event_translate (GdkDisplay *display,
       event->key.string = NULL;
       event->key.length = 0;
       event->key.hardware_keycode = msg->wParam;
+      if (HIWORD (msg->lParam) & KF_EXTENDED)
+       {
+         switch (msg->wParam)
+           {
+           case VK_CONTROL:
+             event->key.hardware_keycode = VK_RCONTROL;
+             break;
+           case VK_SHIFT:      /* Actually, KF_EXTENDED is not set
+                                * for the right shift key.
+                                */
+             event->key.hardware_keycode = VK_RSHIFT;
+             break;
+           case VK_MENU:
+             event->key.hardware_keycode = VK_RMENU;
+             break;
+           }
+       }
+      else if (msg->wParam == VK_SHIFT &&
+              LOBYTE (HIWORD (msg->lParam)) == _scancode_rshift)
+       event->key.hardware_keycode = VK_RSHIFT;
 
       API_CALL (GetKeyboardState, (key_state));
 
index 24bffddc61b4cd7cdd795f67cea5fdaaf0812d1d..60089eb49d0d764531c9aca59cafaed4918a0404 100644 (file)
@@ -40,6 +40,8 @@
 
 guint _gdk_keymap_serial = 0;
 gboolean _gdk_keyboard_has_altgr = FALSE;
+guint _scancode_rshift = 0;
+
 static GdkModifierType gdk_shift_modifiers = GDK_SHIFT_MASK;
 
 static GdkKeymap *default_keymap = NULL;
@@ -357,6 +359,9 @@ update_keymap (void)
        {
          gint shift;
 
+         if (vk == VK_RSHIFT)
+           _scancode_rshift = scancode;
+
          key_state[vk] = 0x80;
          for (shift = 0; shift < 4; shift++)
            {
index d5786a086ab6dd68905147b8c54415e52e8e0b0d..6c5a9112f241e9ef25ea426e2488e13b3552a25b 100644 (file)
@@ -465,6 +465,7 @@ extern UINT          _gdk_input_codepage;
 
 extern guint            _gdk_keymap_serial;
 extern gboolean                 _gdk_keyboard_has_altgr;
+extern guint            _scancode_rshift;
 
 /* Registered clipboard formats */
 extern WORD             _cf_rtf;